// 传统面向对象 
// 类是对象的属性和方法模板
// class Dog{
//     constructor(type,color){
//     this.type = type;
//     this.color = color;
//     }
//     makeSound(){
//         console.log('汪汪');
//     }
//     eat(){
//         console.log('骨头');
//     }
// }

// js 原型式的面向对象
// 构造函数
function Dog(type,name){
    this.type = type;
    this.color = color;
}
// 任何函数都有prototype对象 方法
// Dog.prototype    xb hsq 什么关系
// 共同的实例 共享的方法
// Dog.prototype.makeSound = function(){
//     console.log('汪汪')
// }
// Dog.prototype.eat = function(){
//     console.log('骨头')
// }
Dog.prototype = {
    makeSound: function(){
        console.log(`${name}`)
    },
    eat: function(){
        console.log('')
    } 
}
// 构造函数（属性） 原型对象（方法） = 实例
// 1. 把构造函数运行了一下
// 2. 以 new 的方式运行  this 指向 xb
const xb = new Dog('土狗','白色');
const hsq = new Dog('哈士奇','黑白');
xb.makeSound();// 可以调用方法 因为 xb 
console.log(xb instanceof Dog);// 私有属性
// 实例对象都有一个_proto_指向构造函数的prototype对象
console.log(xb,_proto_);
// xb 构造器有没有相应的属性，可以去原型（prototype）对象上查找
console.log(xb.constructor == hsq.constructor);